/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DataAccessObject;

import BusinessEntity.BE_CasoPruebaEstimacion;
import BusinessEntity.BE_Estimacion;
import BusinessEntity.BE_Requerimiento;
import BusinessLogic.BL_CasoPruebaEstimacion;
import BusinessLogic.BL_Estimacion;
import BusinessLogic.BL_Requerimiento;
import Comun.Conexion;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;

/**
 *
 * @author kuntouch
 */
public class DA_Estimacion {
    
    Conexion con;
    ResultSet rs;
    CallableStatement declaracion;

    private static DA_Estimacion pinstancia=null;

    public static DA_Estimacion obtenerInstancia()
    {
      if (pinstancia==null)
      {
          pinstancia=new DA_Estimacion();
      }
      return pinstancia;
    }
    
    
    public void registrarEstimacion(BE_Estimacion objEstimacion) throws InstantiationException, IllegalAccessException, SQLException{

        con = Conexion.ObtenerInstancia();
        
        try {
            con.IniciarConexion();
            String strProcedure = "{call registrarEstimacion(?,?,?,?,?,?,?) }";
            declaracion = con.preparaLlamada(strProcedure);
            declaracion.setInt(1, objEstimacion.getIntTotalHoras());
            declaracion.setInt(2, objEstimacion.getIntCantRecursos());
            declaracion.setInt(3, objEstimacion.getIntHorasAnalisis());
            declaracion.setInt(4, objEstimacion.getIntHorasDisenio());
            declaracion.setInt(5, objEstimacion.getIntHorasEjecucion());
            declaracion.setInt(6, objEstimacion.getIntHorasCierre());
            declaracion.setInt(7, objEstimacion.getObjBE_Requerimiento().getIdRequerimiento());
            declaracion.execute();
            
   
        } catch (SQLException exception) {
            System.out.println("error: " + exception.getMessage());
            exception.printStackTrace();
        } finally {
            con.CerrarConexion();
    
        }
        
        BE_Estimacion objBE_EstimacionAgregada = new BE_Estimacion();
        BE_CasoPruebaEstimacion objBE_CasoPruebaEstimacionAgregar = new BE_CasoPruebaEstimacion();
        for(BE_CasoPruebaEstimacion objBE_CasoPruebaEstimacion : objEstimacion.getAobjBE_CasoPruebaEstimaciones()){
            objBE_CasoPruebaEstimacionAgregar = objBE_CasoPruebaEstimacion;
            objBE_EstimacionAgregada.setIdEstimacion(BL_Estimacion.obtenerInstancia().obtenerUltimaEstimacion());
            objBE_CasoPruebaEstimacionAgregar.setObjBE_Estimacion(objBE_EstimacionAgregada);
            
            BL_CasoPruebaEstimacion.obtenerInstancia().registrarCasoPruebaEstimacion(objBE_CasoPruebaEstimacionAgregar);
            
        }
        
        BL_Requerimiento.obtenerInstancia().actualizarRequerimientoEstimado(objEstimacion.getObjBE_Requerimiento().getIdRequerimiento());
    }
    
    public int obtenerUltimaEstimacion() throws InstantiationException, IllegalAccessException{
            con = Conexion.ObtenerInstancia();
            int numero = 0;
        
        try {
            con.IniciarConexion();
            String strProcedure = "{? = call obtenerUltimaEstimacion() }";
            declaracion = con.preparaLlamada(strProcedure);
            declaracion.registerOutParameter(1, Types.INTEGER);
            declaracion.execute();
            numero = declaracion.getInt(1);
            
   
        } catch (SQLException exception) {
            System.out.println("error: " + exception.getMessage());
            exception.printStackTrace();
        } finally {
            
            con.CerrarConexion();
 
            
        }
        return numero;
        }
    
        public BE_Estimacion obtenerEstimacionIdRequerimiento(BE_Requerimiento objBE_Requerimiento) throws InstantiationException, IllegalAccessException, SQLException{
            con = Conexion.ObtenerInstancia();
            BE_Estimacion objBE_EstimacionResultado = new BE_Estimacion();
            ArrayList<BE_Estimacion> aobjBE_Estimaciones = new ArrayList<BE_Estimacion>();

        try {
            con.IniciarConexion();
            String strProcedure = "{call obtenerEstimacionIDReq(?) }";
            declaracion = con.preparaLlamada(strProcedure);
            declaracion.setInt(1, objBE_Requerimiento.getIdRequerimiento());
            declaracion.execute();
            rs = declaracion.getResultSet();   
            
            while(rs.next()){
                BE_Estimacion objBE_Estimacion = new BE_Estimacion();
                objBE_Estimacion.setIdEstimacion(rs.getInt("idEstimacion"));
                objBE_Estimacion.setIntTotalHoras(rs.getInt("intTotalHoras"));
                objBE_Estimacion.setIntCantRecursos(rs.getInt("intCantRecursos"));
 
                aobjBE_Estimaciones.add(objBE_Estimacion);

            }
            
            if(aobjBE_Estimaciones != null){
                objBE_EstimacionResultado = aobjBE_Estimaciones.get(0);
            }
            
   
        } catch (SQLException exception) {
            System.out.println("error: " + exception.getMessage());
            exception.printStackTrace();
        } finally {
            
            con.CerrarConexion();
 
            
        }
        
        return objBE_EstimacionResultado;
      
}
}
